# -*- coding: utf-8 -*-
import lxml.html
import requests as rq
import pandas as pd

#得不到数据时或完整数据，要手动滑块验证
#伪装浏览器
header={'User-Agent':'Chrome/55.0.2883.75 Safari/537.36'}
save_data=[]#保存完整榜单
#循环页数
for page in range(10):
    #观察规律，构造url
    url='https://maoyan.com/board/4?offset='+str(page*10)
    #获取网页源代码
    source=rq.get(url,headers=header)
    data=source.text
    #字符串转换为Element对象
    selector=lxml.html.fromstring(data)
     #第一次匹配，内容全部包含在main里面，直接定位
    data=selector.xpath('//div[@class="main"]')
    #第二次匹配以movie开头的div属性，第一个move开头包含名字、主演、上映时间，第二个包含得分
    data1=data[0].xpath('//div[starts-with(@class,"movie")]')
    #第三次匹配，选取第一个包含movie标签，匹配属性值name,获取电影名字
    data2=data1[0].xpath('//p[@class="name"]/a/text()')
    ##第四次匹配，匹配属性值为star，获取主演
    data3=data1[0].xpath('//p[@class="star"]/text()')
    ##第五次匹配，匹配属性值releasetime,获取上映时间
    data4=data1[0].xpath('//p[@class="releasetime"]/text()')
    ##选取第二个以movie开头以获得得分
    #获取第一个i标签的得分整数部分
    data5=data1[1].xpath('//p[@class="score"]/i[1]/text()')
    #获取第二个i标签得分小数部分
    data6=data1[1].xpath('//p[@class="score"]/i[2]/text()')
    #数据整合,创建数据框
    D=pd.DataFrame()
    D['电影名字']=data2
    D['主演']=[i.strip() for i in data3]#循环去掉两端空格
    D['上映时间']=data4
    D['电影得分']=[data5[i]+data6[i] for i in range(len(data5))]#电影得分
    save_data.append(D)  
    #转化为数据框
    save_data1=pd.concat(save_data)
#    #重置索引
    save_data1.index=range(save_data1.shape[0])
    #保存为excel
    save_data1.to_excel('猫眼电影Top100.xlsx')
 
